home *** CD-ROM | disk | FTP | other *** search
- ///////////////////////////////////////////////////////////////////////////////
- / /
- / 19.08.93 /
- / /
- / Compiler/Bibliothekspatches zu GFABASIC Atari ST/STE/TT/Falcon /
- / /
- / P*ST: /
- / Christoph Conrad /
- / Adalbertsteinweg 113 /
- / 52070 Aachen /
- / /
- / E-Mail Direkt: /
- / MAUS: Christoph Conrad @ AC3 /
- / /
- / E-Mail Gateways: /
- / FIDO: Christoph Conrad % Maus AC3 2:242/2.6 /
- / ACHTUNG: evt. neu /
- / Christoph Conrad % Maus AC3 2:242/42.333 /
- / USEnet: Christoph_Conrad@ac3.maus.de (keine ueberlangen Mails!) /
- / Zerberus: Christoph_Conrad%ac3@zermaus.zer /
- / Pronet: MAUS:AC3:Christoph_Conrad /
- / Internet: conrad@pool.Informatik.RWTH-Aachen.DE /
- / (selten, bitte keine ueberlangen Mails!) /
- / BTX: Seite *35008024#, im Formular ausfüllen /
- / Christoph_Conrad@AC3.MAUS.DE.UUCP /
- / (kostet 90 Pfennig) /
- / /
- / Falls Sie irgendetwas entdecken, was Sie stört, oder Verbesserungsvorschläge/
- / haben, nur zu: schreiben Sie mir über EMail (vorzugsweise) oder P*ST. /
- / /
- / Wenn Sie Fehler im Basic finden, schreiben Sie mir! /
- / /
- / Ich kann weder die juristische Verantwortung noch irgendeine Haftung fuer /
- / eventuelle Schaeden an Daten oder Programmen uebernehmen, die direkt oder /
- / indirekt auf die Benutzung dieser Patches zurueckzufuehren sind! /
- / /
- ///////////////////////////////////////////////////////////////////////////////
-
- Inhalt:
-
- (I) Allgemeines & Spezielles zu diesen Patches
- (II) Buntgemischter Frage und Antwortteil
-
-
- (I) Allgemeines & Spezielles zu diesen Patches
-
- Moin,
-
- GFABASIC ist uns allen wohl ans Herz gewachsen. Als ich meinen ST frisch
- bekam, war dies die einzige Programmiersprache, die superschnelle
- Turnaroundzeiten (Programm editieren, testen, editieren etc...) erlaubte,
- einen hyperschnellen Compiler/Interpreter hatte (zu allem Überfluss erzeugt
- der Compiler auch noch richtig fixen Code!), einen brauchbaren Editor besass
- UND auch auf 1 MB Rechnern ohne Festplatte sinnvoll eingesetzt werden konnte.
- Ich glaube, dass dies die Hauptgründe für den Erfolg von GFABASIC waren.
-
- Im Laufe der Zeit stellte sich allerdings (nicht nur) im Zuge aufkommender
- Grafikerweiterungen heraus, dass GFABASIC an einigen Stellen Schwachpunkte
- aufweist. Einige (schwerwiegende) Schwachpunkte behebt dieser
- Bibliothekspatch.
-
- Die Bibliothekspatches erschienen bereits in zwei Versionen als GFALI030,
- verbessert als GFALI072. Dann fragte mich Gregor Duchalski @ DO, ob ich nicht
- Lust habe, meine Sachen zu einem Programm beizusteuern, welches Patches des
- Interpreters unter einer komfortablen GEM-Oberfläche erlaubt.
-
- Da meine Patchprogramme keinerlei Komfort in der Bedienung aufwiesen
- UND ich Gregors Engagement und Wissen aus der MAUSgruppe GFABASIC kannte,
- stimmte ich zu. Zudem überzeugte mich seine GFA-Bibliothek, die auch in sein
- GFA_PTCH einfloss.
-
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Was bietet der Compilerpatchteil von GFA_PTCH?
-
- - Line-A-Patches werden automatisch eingebaut!
- - saubere Autoordnererkennung
- - saubere Erkennung von Acessories
- - falls der mit $m angeforderte Speicher nicht zur Verfügung steht, kann
- dies erkannt werden
- - $U/$I-Bug in 3.6 behoben!
- Wichtig: Ich rate allerdings ausdrücklich von den $I-Sachen ab. Unsauber,
- z.T. tödlich. Auch $U kann kritisch sein. Mit diesem Init-Teil laufen $U/$I
- genauso 'unsauber' oder 'unsicher' wie vorher, abgesehen davon, dass sie
- unter 3.6 jetzt ÜBERHAUPT laufen.
-
- ERR.LST demonstriert euch in beispielhafter Weise alle Features. Dort wird
- auch $I+ verwendet, dies rein zu Demo-Zwecken. Beachtet die Kommentare in
- ERR.LST und die Hinweise unten in diesem Text unter!
-
- !!! Teile des Assemblercodes © GFA Systemtechnik
-
- Veränderungen an irgendwelchen Teilen NUR zu privaten Zwecken. Veränderte
- Versionen dürfen nicht weitergegeben werden!
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Da das Ganze viel Arbeit war, dürft ihr mir gerne bei Zufriedenheit mit den
- Patches ein Geschenk (Danke!) von >= 10,- DM senden (Quittungen gibbet nich
- (wg. Finanzamt), da Geschenk :-)
-
- Da ich Musikfan bin, könnt ihr mir lieber wahlweise eine Kassette mit einer
- Zusammenstellung eurer Lieblingsmusik schicken (Chromdioxid, Dolby B, am
- liebsten TDK SA-X). Alle Richtungen ausser Klassik mit Gesang (Oper, Operette
- etc.), Schlager, Volksmusik und Plump-Disco (Bananarama, Sabrina) sind
- willkommen, bevorzugt eher unbekannte Ensembles/Bands/Interpret(inn)en.
- Ich hoffe auf Cassettenfluten!!! :-)
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Was macht GFA_PTCH.PRG?
-
- == (a) Patch des Compilers
-
- ACHTUNG: Mit dem gepatchten Compiler übersetzte Programme laufen NICHT mit der
- alten Library!
-
- == (b) Patch der Library
-
- Im strengen Sinn kein Patch, sondern ein Austausch von Code.
-
- == (c) Erstellen eines neuen Indexfiles GFA3BLIB.NDX
-
- MAKE_NDX.PRG _unbedingt_ aufrufen, dieses Programm erstellt eine neue
- GFA3BLIB.NDX. Dies sollte mit GFA_PTCH erfolgen.
-
- Die alte GFA3BLIB.NDX evt. vorher sichern, obwohl diese
- mit MAKE_NDX.PRG jederzeit aus der alten Lib neu erzeugt werden kann.
-
- MAKE_NDX liegt erst ab irgendeiner 3.5er-Version bei, leider. Macht dies
- vorläufig bei Bekannten (falls es bei euch nicht dabei ist), ich frage mal
- bei GFA nach, ob ich es dem Paket beilegen darf, ansonsten werde ich evt.
- ein funktionelles Äquivalent schreiben.
-
- == (d) Patch des Interpreters
-
- Ihr müsst UNBEDINGT einen Interpreterpatch mit GFA_PTCH.PRG durchführen. Falls
- euer Interpreter noch nicht bei uns erfasst ist:
-
- Jeweils das ERSTE vorkommende $A00A und $A009 durch $4E71 ersetzen.
- Das _sollte_ klappen. Das Umfeld der Patches lautet: $E0C0 $A00A $4CDF sowie
- $0008 $A009 $246E.
-
- Das gibt zwar leichte "Flecken" beim Bewegen der Maus im Editor
- des Interpreters, aber dafuer keine beim laufenden Programm (saubere
- Schachtelung von hidems/showms per GRAF_MOUSE vorausgesetzt!).
-
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Falls Ihr weiterhin Probleme habt:
-
- - mit der Original GFA3BLIB (+ zugehörigem GFA3BLIB.NDX) testen.
-
- Schickt mir
- - das INIT.O eurer Library.
- - Die genaue Versionsbezeichnung/Länge der Library / des Compilers.
-
- Damit dies ganz einfach geht: INIT2DMP.PRG erwartet im gleichen Verzeichnis
- GFA3BLIB und erzeugt eine ausdruck- bzw. E-mailbare Datei INIT.DMP.
-
- !!! Denkt dran dabei eure ORIGINAL-Lib oder eine Kopie derselben !!!
- !!! und nicht etwa eine schon gepatchte zu benutzen !!!
-
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Wie arbeite ich damit?
-
- Seht euch bitte ERR.LST an. Ich hoffe das reicht. Lest euch nach Möglichkeit
- auch den Frage- und Antwortteil dieses Textes durch. Die dort zu vermeidenden
- Befehle sind zwingend (wg. der Line-A-Patches), viele der dort angegebenen
- Tips nützlich.
-
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- BUGS:
-
- Hoffentlich nicht allzuviele.
-
- Noch bearbeitet werden:
- -
- ERR scheint im Interpreter beim Start nicht immer auf 0 initialisiert zu sein.
-
- Bevor ihr diesem INIT was anlastet, bitte erst mal mit der
- Original GFA3BLIB (+ zugehörigem GFA3BLIB.NDX) testen.
-
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Disclaimer:
-
- Ich habe alle Sorgfalt walten lassen, um fehlerfreie Programme/Daten zu
- erstellen. Trotzdem sind Fehler nie ganz auszuschliessen. Deshalb kann
- weder die juristische Verantwortung noch irgendeine Haftung von Seiten
- des Autors für eventuelle Schäden an Daten oder Programmen, die direkt
- oder indirekt auf die Benutzung dieses Programms zurückzuführen sind,
- übernommen werden!
-
- *******************************************************************************
-
- (II) Buntgemischter Frage und Antwortteil
-
- FRAGEN & ANTWORTEN:
-
- +++++++++++++++++++++
- FRAGE:
- Ich höre immer, Line-A sollte nicht verwendet werden. Warum eigentlich?
- Nun, wie bekomme ich denn dann meine Compilerbibliothek (GFA3BLIB) Line-A frei?
-
- Im folgenden bedeute LA LINE-A!
-
- ANTWORT:
- Dazu ein Auszug aus dem Profibuch, 10te Auflage:
-
- [ZITAT:ON]
- Die Architektur des Betriebssystems spricht allerdings eindeutig gegen die
- Benutzung der Line-A-Routinen. Diese stellen nämlich die untere Ebene des
- VDI-Bildschirmtreibers im ROM dar. Mit ihrer Verwendung verbaut man sich also
- eine eventuelle Nutzung eines anderen (schnelleren) Bildschirmtreibers!
-
- Auch ist eine Existenz der Line-A-Routinen nur für die ST-Modi (also
- 320 * 200, 640 * 200 und 640 * 400) garantiert. Schon bei 256-Farbgrafik
- (spezielle Grafikkarte bzw. TT in der 'niedrigen' Auflösung) sind die
- Möglichkeiten der Line-A-Schnittstelle erschöpft (siehe COLBIT0 bis COLBIT3).
- [ZITAT:OFF]
-
- Falls Sie jetzt nur Bahnhof verstanden haben: KEINE PANIK!
-
- Eine entscheidende Folgerung dieser Aussagen ist, das Programme, die Line-A
- Routinen benutzen, nicht unbedingt korrekt auf allen Graphikkarten laufen!
- Ergo: weg damit.
-
- *** Auf eine saubere Schachtelung von hidems/showms
- (ueber GRAF_MOUSE AES 78) achten! Zu jedem Hide ein Show, sonst gibt's
- "Flecken". Maus nicht anschalten, wenn sie schon an ist, wie in der
- Regel nach dem Start von GEM-Programmen, sonst "Flecken".
-
- *** FOLGENDE BEFEHLE MEIDEN:
- CRSCOL CRSLIN MOUSE MOUSEK MOUSEX MOUSEY SETMOUSE RC_COPY
- SHOWM HIDEM SPRITE ACHAR ACLIP ALINE APOLY ARECT
- ATEXT BITBLT HLINE L~A PSET PTST GET PUT
- SGET SPUT FILESELECT FILESELECT #
-
- Bei Verwendung ohne #datei_nummer:
- INPUT INPUT$ LINE INPUT
-
- Ausweichbefehle:
-
- MOUSE/MOUSEK/MOUSEX/MOUSEY -> (AES) GRAF_MKSTATE
- SETMOUSE -> (AES) APPL_TPLAY
- SHOWM/HIDEM -> (AES) GRAF_MOUSE
- FILESELECT -> (AES) FSEL_INPUT
- FILESELECT # -> (AES) FSEL_EXINPUT
- SPRITE -> (VDI) vro/vrt_cpyfm
- ACHAR -> (VDI) TEXT
- ACLIP -> (VDI) CLIP
- ALINE -> (VDI) LINE
- APOLY -> (VDI) POLYLINE
- ARECT -> (VDI) PBOX
- ATEXT -> (VDI) TEXT
- BITBLT -> (VDI) BITBLT q%(),z%(),d%()
- HLINE -> (VDI) LINE
- PSET -> (VDI) PLOT oder v_pmarker bei grob > 200 Punkten
- PTST -> (VDI) POINT
- GET/PUT/SGET/SPUT -> (VDI) BITBLT
- RC_COPY -> (VDI) BITBLT
-
- >> Ohne Gewaehr auf Vollstaendigkeit!
-
- +++++++++++++++++++++
- FRAGE:
- Wo finde ich denn Hinweise auf GEM-konforme Programmierung?
-
- ANTWORT:
- Tim Orens ProGEM. Dieser Text von 1985, inzwischen wohl in den meisten Mäusen
- zu finden, gehoert mit zum besten ueber 'Professionelle GEM'-Programmierung.
- Weiterhin gibt es das Buch 'Vom Anfänger zum GEM-Profi' der Gebrüder Geiss.
- Ein wenig unübersichtlich, aber sonst ganz gut. Unverzichtbar ist allerdings
- das 'Profibuch' von Jankowski/Reschke/Rabich, vor allen Dingen als Referenz.
-
- +++++++++++++++++++++
- FRAGE:
- GFA bietet doch so schöne eigene Befehle für Fenster. Taugt das was?
-
- ANTWORT:
- Ich rate von der Verwendung der GFA eigenen Fensterverwaltung ab.
- Diese war in frueheren Versionen fehlerhaft, ob heute, wer weiss?
- Übers AES ist es genauso 'einfach' oder 'schwierig'.
-
- +++++++++++++++++++++
- FRAGE:
- Mein Programm stürzt mir manchmal ab. Ich kann beim besten Willen keinen Fehler
- finden. Was kann das sein und wie finde ich das raus?
-
- ANTWORT:
- SysMon und TempleMon verwenden. TempleMon kann in vielen MAUS-Boxen gesaugt
- werden, SysMon direkt beim Autor
-
- Karsten Isakovic
- Wilmersdorferstr. 82
- 1000 Berlin 12
-
- bezogen werden. Zum Zeitpunkt des Absturzes kann man so zumindest den letzten
- verwendeten Systemaufruf feststellen und evt. falsche Parameter.
-
- Eine weitere gute Möglichkeit ist die Verwendung von TRACE procedurename
- (siehe Handbuch). Wenn man nun alle getraceten Zeilen in eine vorher
- geöffnete Datei schreibt (PRINT #1,TRACE$) lässt sich die Absturzstelle
- schnell lokalisieren.
-
- Ebenso nützlich kann der Turbo-C/Pure-C Debugger sein, wenn man das Programm
- mit Symbolen übersetzt.
-
- Ein weitgehend unbekannter Fehler betrifft die GFA-Basic eigene
- Speicherverwaltung. Der Fehler ist in allen 3er Versionen.
-
- Abhilfe: an 'häufig' durchlaufene Stellen (die irgendwas mit Strings
- machen) ein ~ FRE(0).
-
- Probiert mal folgendes (danach neu booten):
-
- ' Compilerversion mit $m
- ' statt RESERVE
- RESERVE 1000
- $m 4711
- ' RESERVE damit's etwas schneller abstürzt aber eigentlich unnötig
- ' Die (**) Zeilen braucht man beim Interpreter, damit
- ' nach dem RESERVE auch wirklich danach (FRE() MOD 16) == 0 gilt
- ' minus 4: wegen Backtrailer bei rest16$ beim Compiler falls $m XXXX
- ' mit (XXXX MOD 16)<>0
- rest16%=(FRE(0) MOD 16)-4 ! **
- IF rest16%<0 ! **
- ADD rest16%,16 ! **
- ENDIF ! **
- rest16$=STRING$(rest16%,0) ! **
- ' (FRE() MOD 16) == 0 jetzt erfüllt
- str$="AHAH"
- DO
- @crash(str$)
- LOOP
- PROCEDURE crash(str$)
- str$="OHOH"
- RETURN
-
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Danksagungen:
-
- - Harald Ax für DELITE, eine hervorragende GFA-Shell
- - Jankowski/Rabich/Reschke für ihr "Profibuch", eine unverzichtbare Fundgrube.
- - Karsten Isakovic für seinen 'SysMon', sowie
- Thomas Tempelmann und Johannes Hill für den 'TempleMon'
- Beide Tools bekannt als 'The Programmers best friends' :-)
- - ATARI / Landon Dyer für den 'MadMac'.
- - GENESIS für 'Selling England by the pound' sowie 'Foxtrot'
- THE CURE für 'Disintegrations'
- THE RED HOT CHILI PEPPERS für 'Blood sugar sex magik'
- KING'S X © 1992 (mit 'Black Flag')
- TEMPLE OF THE DOG für ihr Debütalbum
- RAGE AGAINST THE MACHINE für ihr Debütalbum
- BODY COUNT & ICE-T für die Platte
- - Barbara für die Erkenntnis, dass es ein Leben ohne Rechner gibt =:^}
-
- Viel Spass wünscht euch
-
- tschueeessschen, chris.
-